#include <iostream>

// 主函数，程序的入ddd口
#include <vector>


// 建议使用 const 引用传递 vector，避免不必要的拷贝，提高速度
void printVector(const std::vector<int>& nums) {
    for (auto n : nums) {
        std::cout << n << " ";
    }
    std::cout << std::endl;
}
/*
C++ STL 最常用的五个容器：
1. std::vector：动态数组，支持高效的随机访问和尾部插入/删除。
2. std::map：有序关联容器，基于红黑树实现，按 key 自动排序。
3. std::set：有序集合，元素唯一，自动排序。
4. std::unordered_map：哈希表实现的关联容器，查找和插入效率高。
5. std::string：字符串类，支持丰富的字符串操作。
*/

class Base {

    public:
        virtual ~Base() = default;
        virtual void show() = 0;
};

class Derived : public Base {
    public:
        void show() override {
            std::cout << "Derived show" << std::endl;
        }
        ~Derived() override {
            std::cout << "Derived destructor called" << std::endl;
        }
};

//想要修改const成员函数，需要在函数声明前加上mutable关键字
class Count{
    public:
        mutable int count = 0; // mutable 关键字用于声明可变数据成员

        void show() const{
        count++;
        std::cout << "Count: " << count << std::endl;
    }
};
int main() {
    Base* b = new Derived;
    b->show();

    Count c;
    c.show();
    c.show();

    //c.count++;
    
    
    delete b;
}
